﻿
//
// 版权所有 (c) 2021-2023 JR
//
// 特此免费授予获得本软件的任何人以处理本软件的权利，但须遵守以下条件：在所有副本或重要部分的软件中必须包括上述版权声明和本许可声明。
//
// 软件按“原样”提供，不提供任何形式的明示或暗示的保证，包括但不限于对适销性、适用性和非侵权的保证。
// 在任何情况下，作者或版权持有人均不对任何索赔、损害或其他责任负责，无论是因合同、侵权或其他方式引起的，与软件或其使用或其他交易有关。

using SqlSugar.DbConvert;

namespace EMC.VISITOR.Core;

/// <summary>
/// 代码生成表
/// </summary>
[SugarTable(null, "代码生成表")]
[SysTable]
public class SysCodeGen : EntityBase
{
    public SysCodeGen()
    {

    }
    /// <summary>
    /// 作者姓名
    /// </summary>
    [SugarColumn(ColumnDescription = "作者姓名", Length = 32)]
    [MaxLength(32)]
    public string? AuthorName { get; set; }

    /// <summary>
    /// 是否移除表前缀
    /// </summary>
    [SugarColumn(ColumnDescription = "是否移除表前缀", Length = 8)]
    [MaxLength(8)]
    public string? TablePrefix { get; set; }

    /// <summary>
    /// 生成方式
    /// </summary>
    [SugarColumn(ColumnDescription = "生成方式", Length = 32)]
    [MaxLength(32)]
    public string? GenerateType { get; set; }

    /// <summary>
    /// 库定位器名
    /// </summary>
    [SugarColumn(ColumnDescription = "库定位器名", Length = 64)]
    [MaxLength(64)]
    public string? ConfigId { get; set; }

    /// <summary>
    /// 数据库名(保留字段)
    /// </summary>
    [SugarColumn(ColumnDescription = "数据库库名", Length = 64)]
    [MaxLength(64)]
    public string? DbName { get; set; }

    /// <summary>
    /// 数据库类型
    /// </summary>
    [SugarColumn(ColumnDescription = "数据库类型", Length = 64)]
    [MaxLength(64)]
    public string? DbType { get; set; }

    /// <summary>
    /// 数据库链接
    /// </summary>
    [SugarColumn(ColumnDescription = "数据库链接", Length = 256)]
    [MaxLength(256)]
    public string? ConnectionString { get; set; }

    /// <summary>
    /// 数据库表名
    /// </summary>
    [SugarColumn(ColumnDescription = "数据库表名", Length = 128)]
    [MaxLength(128)]
    public string? TableName { get; set; }

    /// <summary>
    /// 命名空间
    /// </summary>
    [SugarColumn(ColumnDescription = "命名空间", Length = 128)]
    [MaxLength(128)]
    public string? NameSpace { get; set; }

    /// <summary>
    /// 业务名
    /// </summary>
    [SugarColumn(ColumnDescription = "业务名", Length = 128)]
    [MaxLength(128)]
    public string? BusName { get; set; }

    /// <summary>
    /// 菜单编码
    /// </summary>
    [SugarColumn(ColumnDescription = "菜单编码")]
    public long MenuPid { get; set; }

    [SugarColumn(IsNullable = true, ColumnDescription = "勾选框显示条件")]
    public string CheckWhere { get; set; }
    /// <summary>
    /// 组件信息
    /// </summary>
    [SugarColumn(IsJson = true, IsNullable = true, ColumnDescription = "组件信息", ColumnDataType = StaticConfig.CodeFirst_BigString)]
    public List<CodeGenComment> Comments { get; set; }

    /// <summary>
    /// 通用按钮
    /// </summary>
    [SugarColumn(IsJson = true, IsNullable = true, ColumnDescription = "通用按钮", ColumnDataType = StaticConfig.CodeFirst_BigString)]
    public List<NormalButton> NormalButtons { get; set; }

    [SugarColumn(IsNullable = true, ColumnDescription = "复制其它表配置")]
    public string CopyOtherTableConfig { get; set; }

    /// <summary>
    /// 开启历史表
    /// </summary>
    [SugarColumn(IsNullable = true, ColumnDescription = "开启历史表")]
    public bool Temp1 { get; set; } = false;
    /// <summary>
    /// 列表多选
    /// </summary>
    [SugarColumn(IsNullable = true, ColumnDescription = "列表多选")]
    public bool Temp2 { get; set; } = true;
    /// <summary>
    /// 做为子组件加载字段名
    /// </summary>
    [SugarColumn(IsNullable = true, ColumnDescription = "做为子组件加载字段名")]
    public string Temp3 { get; set; }
    /// <summary>
    /// App使用自定义导航栏 1:是   
    /// </summary>
    [SugarColumn(IsNullable = true, ColumnDescription = "App使用自定义导航栏")]
    public string Temp4 { get; set; }
    /// <summary>
    /// 重写的Service 会重写${TableName}Service中的一些方法 ，前端调用此${Temp5}Service接口
    /// </summary>
    [SugarColumn(IsNullable = true, ColumnDescription = "重写的Service")]
    public string Temp5 { get; set; }

    [Navigate(NavigateType.OneToMany, nameof(SysCodeGenConfig.CodeGenId), nameof(Id))]
    public List<SysCodeGenConfig> Configs { get; set; }

}

public class NormalButton
{
    public string Desc { get; set; }
    public string ButtonName { get; set; }
    public bool IsUse { get; set; }

    public int Order { get; set; } = 0;
}

public class CodeGenComment
{
    /// <summary>
    /// 按钮名称
    /// </summary>
    public string ButtonName { get; set; }

    /// <summary>
    /// 按钮权限名称
    /// </summary>
    public string ButtonAuth { get; set; }
    /// <summary>
    /// 组件名称
    /// </summary>
    public string CommentName { get; set; }
    /// <summary>
    /// 组件路径，會把 CommentPathTemp，拼接成：import expand from '/@/views/main/typeItem/index.vue'；
    /// </summary>
    public string CommentPath { get; set; }

    /// <summary>
    /// 臨時組件路徑 如：'/@/views/main/typeItem/index.vue'
    /// </summary>
    public string CommentPathTemp { get; set; }
    /// <summary>
    /// 關聯字段 
    /// </summary>
    public string AssField { get; set; }

    /// <summary>
    /// 新增或修改
    /// </summary>
    public string addOrUpdate { get; set; }
    /// <summary>
    /// 组件类型  Y:多行（按钮显示在顶上） YB：多行选中操作按钮-纯按钮（不关联组件）   N:单行操作按钮-弹框  NB:单行操作按钮-纯按钮  E:展开（显示展开图标） C:行颜色
    /// </summary>
    public string IsMultipleOperation { get; set; } = "Y";

    /// <summary>
    /// 禁用条件
    /// </summary>
    public string DisabledWhere { get; set; }
}